home *** CD-ROM | disk | FTP | other *** search
/ PD Collection CD 1 / PD Collection CD 1.iso / textual / pdftops / goo / c / cover next >
Text File  |  1996-05-23  |  1KB  |  74 lines

  1. /*
  2.  * cover.c
  3.  *
  4.  * Simple code coverage checking.
  5.  *
  6.  * Copyright 1996 Derek B. Noonburg
  7.  */
  8.  
  9. #include <stdio.h>
  10. #include <stddef.h>
  11. #include <string.h>
  12. #include <gmem.h>
  13. #include <cover.h>
  14.  
  15. typedef struct _CoverEntry {
  16.   char *name;
  17.   int num;
  18.   struct _CoverEntry *next;
  19. } CoverEntry;
  20.  
  21. static CoverEntry **hashTab;
  22. static int hashSize;
  23.  
  24. void doCoverInit(int hashSize1) {
  25.   int h;
  26.  
  27.   hashSize = hashSize1;
  28.   hashTab = gmalloc(hashSize * sizeof(CoverEntry *));
  29.   for (h = 0; h < hashSize; ++h)
  30.     hashTab[h] = NULL;
  31. }
  32.  
  33. void doCover(char *name) {
  34.   int h;
  35.   char *p;
  36.   CoverEntry *e;
  37.  
  38.   h = 0;
  39.   for (p = name; *p; ++p)
  40.     h = (h * 17 + *p) % hashSize;
  41.   for (e = hashTab[h]; e; e = e->next) {
  42.     if (!strcmp(name, e->name))
  43.       break;
  44.   }
  45.   if (!e) {
  46.     e = gmalloc(sizeof(CoverEntry));
  47.     e->name = name;
  48.     e->num = 0;
  49.     e->next = hashTab[h];
  50.     hashTab[h] = e;
  51.   }
  52.   ++e->num;
  53. }
  54.  
  55. void doCoverDump(FILE *f) {
  56.   int h;
  57.   CoverEntry *e1, *e2;
  58.  
  59.   fprintf(f, "Coverage:\n");
  60.   for (h = 0; h < hashSize; ++h) {
  61.     for (e1 = hashTab[h]; e1; e1 = e1->next)
  62.       fprintf(stderr, "%-32s %8d\n", e1->name, e1->num);
  63.   }
  64.   fprintf(f, "\n");
  65.  
  66.   for (h = 0; h < hashSize; ++h) {
  67.     for (e1 = hashTab[h]; e1; e1 = e2) {
  68.       e2 = e1->next;
  69.       gfree(e1);
  70.     }
  71.   }
  72.   gfree(hashTab);
  73. }
  74.